<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /**
         * ES6  class extends
         * 
         * 工程化  
         * 
         * ES5 类的继承
         * 1. 属性的继承： 子类继承父类的属性，方式是在子类的构造函数中，执行父类的构造函数，并改变this指向即可  Person.apply(this,arguments)
         * 2. 原型上方法的继承
         *    2-1. 让子类的原型对象是父类的实例对象
         *    2-2. 给子类的原型对象加 constructor属性
         * 
         */

        function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        
        Person.prototype.say = function () {
            console.log(this.name, this.age);
        }

        function Son(name, age, sex) {
            // 子类继承父类的属性，方式是在子类的构造函数中，执行父类的构造函数，并改变this指向即可
            Person.call(this, name, age);// 继承的父类的属性
            // Person.apply(this,arguments);

            // Son 自己的私有属性
            this.sex = sex;
        }
        // 子类继承父类的方法，让子类的原型对象是父类的实例对象
        Son.prototype = new Person();
        Son.prototype.constructor = Son;

        var s1 = new Son('小张', 29, '男');
        var s2 = new Son('小李', 29, '女');
        console.log(s1, s2);
        s1.say();
        s2.say();

        console.log(s1 instanceof Son);


        // var obj = Object.create(Person.prototype)
        // Son.Prototype = obj

        

    </script>
</body>

</html>